<?php

declare (strict_types = 1);

namespace app\common\model\user;

use app\common\model\BaseModel;
use think\model\concern\SoftDelete;

class User extends BaseModel
{
    use SoftDelete;

    protected $name = 'user';

    // 隐藏字段
    protected $hidden = ['password'];

    // 类型转换
    protected $type = [
        'id' => 'string',
        'photos' => 'array',
        'interests' => 'array',
        'referrer_id' => 'string'
    ];

    // 软删除字段
    protected string $deleteTime = 'delete_time';

    public function setInterestsAttr($value): string
    {
        // 存储时，将数组转为逗号分隔的字符串
        return is_array($value) ? implode(',', $value) : $value;
    }

    // 转数组
    public function getInterestsAttr($value): array
    {
        // 如果字段为空，返回空数组
        if (empty($value)) {
            return [];
        }

        // 如果字段是字符串，拆分为数组
        if (is_string($value)) {
            return array_filter(explode(',', $value)); // 去除空值
        }

        // 如果字段已经是数组，直接返回
        return is_array($value) ? $value : [];
    }

    /**
     * 定义与 Apply 的 HasMany 关联
     *
     * @return \think\model\relation\HasMany
     */
    public function applies(): \think\model\relation\HasMany
    {
        return $this->hasMany(UserApply::class, 'user_id', 'id');
    }
}